package utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import java.util.List;

public class JsonUtils {

    /**
     * 调用 FastJSON 将 JSON 字符串转换为指定类型的 POJO
     * @param stringJson JSON 字符串
     * @param targetClass 目标类的 Class 对象
     * @param <T> 目标类的类型
     * @return 目标类的实例
     */
    public static <T> T jsonToPojo(String stringJson, Class<T> targetClass) {
        if (stringJson == null || stringJson.isEmpty()) {
            return null;  // 如果 JSON 字符串为空，返回 null
        }
        return JSON.parseObject(stringJson, targetClass);
    }

    /**
     * 将JSON数据中的某个字段转化为object类型的数据
     * @param stringJson
     * @param targetParameter
     * @return
     */
    public static Object extractCodeAsObject(String stringJson, String targetParameter) {
        if (stringJson == null || stringJson.isEmpty()) {
            return null;
        }

        // 使用 JSONObject 提取特定字段
        JSONObject jsonObject = JSON.parseObject(stringJson);
        Object target = jsonObject.get(targetParameter);

        return target;  // 直接返回目标字段，这是个Java基本类
    }
    /**
     * 提取 JSON 字符串中的 "code" 字段并将其转换为 String 类型
     * @param stringJson JSON 字符串
     * @param targetParameter
     * @return "code" 字段的值，转换为 String 类型
     */
    public static String extractCodeAsString(String stringJson, String targetParameter) {
        // 调用extractCodeAsObject，先获取到object类
        Object code = extractCodeAsObject(stringJson, targetParameter);
        // 如果 code 字段存在，则返回其 String 类型的值
        if (code != null) {
            return code.toString();
        }
        return null;  // 如果没有 code 字段，则返回 null
    }
    /**
     * 提取 JSON 字符串中的 "songIds" 字段并将其转换为 List<Integer> 类型
     *
     * @param stringJson      JSON 字符串
     * @param targetParameter 目标字段名称 (例如 "songIds")
     * @return "songIds" 字段的值，转换为 List<Integer> 类型
     */
    public static List<Integer> extractSongIdsAsList(String stringJson, String targetParameter) {
        if (stringJson == null || stringJson.isEmpty()) {
            return null;  // 如果 JSON 字符串为空，返回 null
        }

        // 使用 JSONObject 提取特定字段 (如 songIds)，然后将其转换为 List<Integer>
        JSONObject jsonObject = JSON.parseObject(stringJson);
        String songIdsJson = jsonObject.getString(targetParameter);  // 获取 "songIds" 字段的 JSON 字符串

        // 使用 FastJSON 的 parseArray 方法将其转换为 List<Integer>
        if (songIdsJson != null && !songIdsJson.isEmpty()) {
            return JSON.parseArray(songIdsJson, Integer.class);
        }

        return null;  // 如果字段为空或不存在，返回 null
    }
}
